#include "Log.hpp"
#include "Task.hpp"
#include <memory>

// 测试日志刷新策略
// using namespace LogModule;
// int main()
// {
//     // 测试刷新策略
//     //std::unique_ptr<LogStrategy> strategy=std::make_unique<ConsoleLogStrategy>();
//     //std::unique_ptr<LogStrategy> strategy=std::make_unique<FileLogStrategy>();
//     //strategy->SyncLog("hello log!");

//     // 测试日志如何调用
//     // logger(LogLevel::DEBUG, "main.cc", 10) << "hello world," << 3.14 << " " << 8899 << "aaaa";
//     // logger(LogLevel::DEBUG, "main.cc", 10) << "hello world";
//     // logger(LogLevel::DEBUG, "main.cc", 10) << "hello world";
//     // logger(LogLevel::DEBUG, "main.cc", 10) << "hello world";
//     // logger(LogLevel::DEBUG, "main.cc", 10) << "hello world";
//     // logger(LogLevel::DEBUG, "main.cc", 10) << "hello world";
//     // logger(LogLevel::DEBUG, "main.cc", 10) << "hello world";

//     // Enable_Console_Log_Strategy();
//     LOG(LogLevel::DEBUG) << "hello world" << 3.141;
//     LOG(LogLevel::DEBUG) << "hello world" << 3.142;

//     // Enable_File_Log_Strategy();
//     // LOG(LogLevel::DEBUG) << "hello world" << 3.143;
//     // LOG(LogLevel::DEBUG) << "hello world" << 3.144

// }



// 测试普通线程池
// #include "ThreadPool1.hpp"
//  using namespace LogModule;
//  using namespace ThreadPoolModule;
//  int main()
//  {
//      Enable_Console_Log_Strategy();
//      ThreadPool<task_t> *tp = new ThreadPool<task_t>();
//      tp->Start();
//      int count=10;
//      while(count--)
//      {
//          tp->Enqueue(Download);
//          sleep(1);
//      }

//     tp->Stop();
//     tp->Join();

//     return 0;
// }



//测试单例模式的线程池
#include"ThreadPool2.hpp"
 using namespace LogModule;
 using namespace ThreadPoolModule;
 int main()
 {
    // 有一个单例了! 如果线程池本身，会被多线程获取呢？？
    int count = 10;
    while (count) 
    {
        sleep(1);
        ThreadPool<task_t>::GetInstance()->Enqueue(Download);
        count--;
    }

    ThreadPool<task_t>::GetInstance()->Stop();
    ThreadPool<task_t>::GetInstance()->Join();

    return 0;
}
